TOPDIR=$(shell pwd)
BUILDDIR=$(TOPDIR)
obj=$(BUILDDIR)
src=$(TOPDIR)
bld=$(BUILDDIR)

export TOPDIR BUILDDIR obj src bld
export ISLA = $(shell echo __loongarch__|$(CROSS_COMPILE)gcc  -E  - |grep -q '^1$$' && echo 1)
export ISLA32 = $(shell echo __loongarch32|$(CROSS_COMPILE)gcc  -E  - |grep -q '^1$$' && echo 1)
ifeq ($(ISLA),1)
export CROSS_COMPILE?=loongarch64-linux-gnu-
export EXTRA_CFLAGS := -I$(TOPDIR)/include/loongarch $(call cc-option,-mlvz,-mlcsr) $(EXTRA_CFLAGS) -Og -D_loongarchjtag
ifeq ($(shell $(CROSS_COMPILE)gcc --print-file include/larchintrin.h),include/larchintrin.h)
export EXTRA_CFLAGS += -I$(TOPDIR)/include/loongarch32
endif

#affix = -la
obj=$(TOPDIR)/labin
ifeq ($(ISLA32),1)
export EXTRA_CFLAGS := $(EXTRA_CFLAGS) -D_loongarch32jtag=1
obj=$(TOPDIR)/la32bin
all: clean1 labins
	make LOADADDR=0 clean  laelfs
	make clean
else
all: clean1 labin64s
	make LOADADDR=0 clean  laelf64s
	make clean
endif
else
export CROSS_COMPILE?=mipsel-linux-
export EXTRA_CFLAGS := -I$(TOPDIR)/include/mips  $(EXTRA_CFLAGS) -Og
obj=$(TOPDIR)/mipsbin
all:
	make clean allbins32 ARCH_FLAGS=-march=mips32\ -mno-branch-likely
	make clean allbins64 ARCH_FLAGS=-march=mips32\ -mno-branch-likely
	make LOADADDR=0 clean  elfs ARCH_FLAGS=-march=mips32\ -mno-branch-likely
	make LOADADDR=0 clean  elf64s
	make clean
endif




testbin:
	gcc -o testbin testbin.c
clean:
	rm -f *.lds
	cd $(obj);rm -f *.o *.s *.a testbin *.o64 *.s64 *.O *.O64
	cd $(obj);for i in libm libm64 libtinyc libtinyc64;do rm -f $$i/*.o  $$i/*.o64 $$i/mips/*.o $$i/mips/*.o64 $$i/loongarch/*.o64 $$i/*.o64;rmdir $$i/mips $$i/loongarch $$i;done;true
clean1:
	cd $(obj);rm -f *.elf *.elf64 *.ELF *.ELF64
	make clean
cleanall:
	cd $(obj);rm -f *.bin* *.bin64* *.BIN *.BIN64 *.bin-* *.BIN-* *.bin64-* *.BIN64-*
	make clean1

include rules.make

labin64s: $(patsubst %.c,$(obj)/%.bin64$(affix),$(filter-out cache%.c %cache.c dumptlb.c tlb%.c guess.c guess1.c guess2.c memtest.c $(wildcard *-mips.c), $(srcs)))
laelf64s: $(patsubst %.c,$(obj)/%.elf64,$(filter-out cache%.c %cache.c dumptlb.c tlb%.c guess.c guess1.c guess2.c memtest.c, $(srcs)))
labins: $(patsubst %.c,$(obj)/%.bin$(affix),$(filter-out cache%.c %cache.c %tlb.c tlb%.c guess.c guess1.c guess2.c memtest.c, $(srcs)))
laelfs: $(patsubst %.c,$(obj)/%.elf,$(filter-out cache%.c %cache.c %tlb.c tlb%.c guess.c guess1.c guess2.c memtest.c, $(srcs)))
#$(error $(bin64s))

allbins32: $(addprefix $(obj)/, $(patsubst %.c,%.bin$(affix),$(filter-out drdtime.c dump_tlb.c $(wildcard *-la.c),$(srcs))))
allbins64: $(addprefix $(obj)/, $(patsubst %.c,%.bin64$(affix),$(filter-out drdtime.c dump_tlb.c $(wildcard *-la.c),$(srcs)) $(shell echo *.S|sed 's/bin.lds.S//;s/bin64.lds.S//;s/start[^ ]*[.]S//g;'|sed 's/[.]S/.BIN64/g') $(shell echo *.S|sed 's/bin.lds.S//;s/bin64.lds.S//;s/start.*[.]S//;s/loongson3\S*.S//g;'|sed 's/[.]S/.BIN/g')))
allbins: allbins32 allbins64
$(patsubst %.c,$(obj)/%.elf,$(filter-out drdtime.c dump_tlb.c $(wildcard *-la.c),$(srcs))): CFLAGS := $(subst -march=mips64r2,-march=mips32,$(CFLAGS))
o
elfs : $(patsubst %.c,$(obj)/%.elf,$(filter-out drdtime.c dump_tlb.c $(wildcard *-la.c),$(srcs)))
elf64s : $(patsubst %.c,$(obj)/%.elf64,$(filter-out drdtime.c dump_tlb.c $(wildcard *-la.c),$(srcs)))
